from django.http import JsonResponse
from django.utils.decorators import classonlymethod
from django.views import View


def check_user_status(view_func):
    """
    视图类入口函数as_view()装饰器
    :param view_func: 被装饰的目标函数as_view()
    :return:
    """
    def wrapper(request, **initkwargs):
        """
        装饰函数
        在这里添加用户登录状态检测
        :param request: 请求对象
        :param initkwargs: 目标函数的参数
        :return:
        """
        if not request.user.is_authenticated:  # 检测登录状态
            print("用户未登录！")
            return JsonResponse({'code': 400, 'errmsg': '用户未登录'})
        return view_func(request, **initkwargs)
    return wrapper


class LoginRequiredMixin(View):

    @classonlymethod
    def as_view(cls, **initkwargs):
        """
        重写父类as_view()方法
        装饰入口函数as_view()，增加用户状态检测
        :param initkwargs:
        :return:
        """
        view = super().as_view(**initkwargs)  # 获取父类as_view方法
        view = check_user_status(view)  # 装饰父类as_view方法
        return view
